package com.csi.service;

import com.csi.domain.Hotel;
import com.csi.domain.HotelFranchise;
import com.csi.domain.UserAssess;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface HotelService {

    /**
     * 新增酒店 -酒店表-酒店位置表-酒店信息表
     * @param hotel 酒店对象(里面封装了酒店位置对象)
     * @return 执行结果
     */
    int save(Hotel hotel);

    /**
     * 新增酒店加盟表
     * @param hotelFranchise 酒店加盟
     * @return 执行结果
     */
    int saveHotelFranchise(HotelFranchise hotelFranchise);

    /**
     * 查询全部酒店信息
     * @return
     */
    List<Hotel> findAll();

    /**
     * 推荐酒店，查询酒店表中评分前六的酒店
     * @return
     */
    List<Hotel> recommendHotel();

    /**
     * 特价酒店
     * @return
     */
    List<Hotel> discountedhotel();

    /**
     * 查找所有酒店名
     * @return 酒店对象集合
     */
    List<Hotel> findAllHotelName();

    /**
     * 根据用户名字查找预定过的酒店
     * @param userId 用户id
     * @return 执行结果
     */
    List<Map<String, Object>>  findHotelByUserId(long userId);

    /**
     * 根据用户名字查找未支付的酒店
     * @param userId 用户id
     * @return 执行结果
     */
    List<Map<String, Object>>  findHotelByUserIdUnpaid(long userId);

    /**
     * 根据用户名字查找未入住的酒店
     * @param userId 用户id
     * @return 执行结果
     */
    List<Map<String, Object>>  findHotelByIdTravel(long userId);

    /**
     * 根据用户名字查找评价
     * @param userId 用户id
     * @return 执行结果
     */
    List<Map<String, Object>>  findHotelByIdAssess(long userId);

    /**
     * 根据酒店id查询酒店名字
     * @param hotelId 酒店id
     * @return 执行结果
     */
    String findHotelName(long hotelId);

    /**
     * 根据酒店地址信息模糊查询
     * @param name 酒店地址信息部分字段
     * @return
     */
    List<Hotel> likeHotelByAddress(String name);

    /**
     * 根据城市名称、入住日、离店日、入住人数模糊查询
     * @param peopleNum 入住人数
     * @param city_location 城市名称
     * @param check_time 入住日
     * @param leave_time 离店日
     * @return 返回有空闲房间的酒店信息
     */
    List<Hotel> like4book(@Param("people_num") Integer peopleNum,
                          @Param("city_location") String city_location,
                          @Param("check_time") String check_time,
                          @Param("leave_time") String leave_time);

    /**
     * 查询酒店的起步价、评论数量、房型数量
     * @param hotelId 酒店id
     * @return Map<String,Object>
     */
    Map<String,Object> findHotelById(long hotelId);

    /**
     * 查询酒店详情页面内容
     * @param hotelId 酒店id
     * @return Map<String,Object>
     */
    Map<String,Object>  findHotelListById(long hotelId);

    /**
     * 查询房间类型
     * @param hotelId 酒店id
     * @param checkTime 入住时间
     * @param leaveTime 离店时间
     * @return Map<String,Object>
     */
    List<Map<String, Object>> findRoomTypeById(long hotelId,String checkTime,String leaveTime);

    /**
     * 查询房间类型评价
     * @param hotelId 酒店id
     * @return List<UserAssess>
     */
    List<Map<String, Object>>  findAssessById(long hotelId);
}
